#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

// Permutation: 列举
// [1, 2, 3] 找出数组中的所有元素可以组成的所有排列
// [1, 3, 2]
// [2, 1, 3]
// [2, 3, 1]
// [3, 1, 2]
// [3, 2, 1]

void helper(vector<int> array, vector<int> currPerm, vector<vector<int>> &result) {
  if (array.size() == 0) {
    result.push_back(currPerm);
  }
  else {
    for (int i = 0; i < array.size(); ++i) {
      // 从 array 中拿出第 i 个元素，对剩余的元素求全排列
      // [a, b, c, d, e, f]
      //        ^i
      vector<int> tmp;
      tmp.insert(tmp.end(), array.begin(), array.begin() + i);
      tmp.insert(tmp.end(), array.begin() + i + 1, array.end());

      vector<int> newPerm = currPerm;
      newPerm.push_back(array[i]);

      helper(tmp, newPerm, result);
    }
  }

}

vector<vector<int>> permuation(vector<int> array) {

}


int main(int argc, char const *argv[])
{
  /* code */

  return 0;
}
